const path = require('path');

const Koa = require('koa');
const { koaBody } = require('koa-body');
const KoaStatic = require('koa-static');
const parameter = require('koa-parameter');

const router = require('../routers')
const errHandler = require('./errHandler')


const app = new Koa();

//放在 userRouter 之前执行，在所有的api执行之前全部写入ctx.require.body内
app.use(koaBody({
  multipart: true,
  formidable: {
    /*
      * options配置不推荐使用相对路径
      * 因为相对路径是相对于当前执行node命令的目录(process.cwd，即根目录所在路径)，而不是相对于当前文件 ,
    */
    uploadDir: path.join(__dirname, '../upload'),
    keepExtensions: true,
    strict: false,
    maxFileSize: 1024 * 1024 * 10 * 1024,
    jsonLimit: '10mb',
    formLimit: '10mb',
    textLimit: '10mb'
  },
  parsedMethods: ['POST', 'PUT', 'PATCH', 'DELETE']
}));

app.use(KoaStatic(path.join(__dirname, '../upload')))

app.use(parameter(app))

//http 请求方式不支持的情况返回 !下列方法需放置koaBody之后
app.use(router.routes()).use(router.allowedMethods())

// 统一的错误处理
app.on('error', errHandler)

module.exports = app 